package student.aistar.day10;

public class IntegerDemo {
    public static void main(String[] args) {
        Integer i = new Integer(10);//int -> Integer
        System.out.println(i);

        //Java.lang.NumberFormatException
        //如果传入的是一个非数字字符串, 那么会抛出java.lang.NUmberFormatException数字格式异常
        Integer j = new Integer("10");
        System.out.println(j);

        System.out.println(i == j);//false;

        //封箱 - 基本数据类型可以自动转换成对应的包装类型
        //[-128, 127] -> 比较的结果是true, 不在这个范围的返回false;
        Integer a = -129;
        Integer b = -129;
        System.out.println(a == b);//true, 原因是如果超过上面范围时, 会产生new Integer对象,
        //你可以点到Integer.valueOf()方法中查看, 当在这个范围时, 会去找IntegerCache静态内部类里面的cache[]数组
        //该数组一开始就初始化到-128 到 127, 所以在这个范围内判断==符号时, 指向的结果都是同一个地址cache[]数组

        //解箱 -> 包装类型也是可以自动转换成对应的包装类型
        int p = a;//指令 -> a.intValue();

        //IntegerCache类 -> Integer cache[] - 缓冲区
        Integer x = Integer.valueOf(126);
        Integer y = Integer.valueOf(126);
        System.out.println(x == y);//true;这个方法的解释在上面, 128超出了范围, 重新new了一个对象

        //Integer -> int类型
        int n = a.intValue();
        System.out.println(n);

        //基本类型和包装类型之间的比较
        int t = 300;
        Integer t2 = new Integer(300);
        Integer t3 = Integer.valueOf(300);
        //当包装类型和基本类型进行比较的时候, 包装类型调用intValue方法 - 转换成基本数据类型之后然后再和基本数据类型进行比较
        System.out.println(t == t2);//true
        System.out.println(t == t3);//true
        System.out.println(t2 == t3);//false

        //进制转换
        System.out.println(Integer.toBinaryString(10));//1010
        System.out.println(Integer.toHexString(176));//b0
        System.out.println(Integer.toOctalString(26));//32

        //字符串 -> int
        System.out.println(Integer.parseInt("100"));

        //String -> Integer
        System.out.println(Integer.valueOf("1000"));

        //int类型的范围
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);

        //Integer -> String
        System.out.println(String.valueOf(t2));
    }
}
